'' Functions in this file:
''	isxmlelement
''	islist
''	isint
''	isfunc
''	isstr
''	isbool
''	isfloat
''	validstr
''	validateParam     

'******************************************************
'isxmlelement
'
'Determine if the given object supports the ifXMLElement interface
'******************************************************
Function isxmlelement(obj as dynamic) As Boolean
	return obj <> invalid and  GetInterface(obj, "ifXMLElement") <> invalid
End Function

'******************************************************
'islist
'
'Determine if the given object supports the ifList interface
'******************************************************
Function islist(obj as dynamic) As Boolean
	return obj <> invalid and GetInterface(obj, "ifArray") <> invalid
End Function

'******************************************************
'isint
'
'Determine if the given object supports the ifInt interface
'******************************************************
Function isint(obj as dynamic) As Boolean
	return obj <> invalid and GetInterface(obj, "ifInt") <> invalid
End Function

'******************************************************
'isfunc
'
'Determine if the given object supports the function interface
'******************************************************
Function isfunc(obj as dynamic) As Boolean
	tf = type(obj)
	return tf="Function" or tf="roFunction"
End Function

'******************************************************
'isstr
'
'Determine if the given object supports the ifString interface
'******************************************************
Function isstr(obj as dynamic) As Boolean
	return obj <> invalid and  GetInterface(obj, "ifString") <>invalid
End Function

'******************************************************
'isbool
'
'Determine if the given object supports the ifBoolean interface
'******************************************************
Function isbool(obj as dynamic) As Boolean
	if obj = invalid return false
	if GetInterface(obj, "ifBoolean") = invalid return false
	return true
End Function

'******************************************************
'isfloat
'
'Determine if the given object supports the ifFloat interface
'******************************************************
Function isfloat(obj as dynamic) As Boolean
	if obj = invalid return false
	if GetInterface(obj, "ifFloat") = invalid return false
	return true
End Function

'******************************************************
' validstr
'
' always return a valid string. if the argument is 
' invalid or not a string, return an empty string.
'******************************************************
Function validstr(obj As Object) As String
	if obj <> invalid and GetInterface(obj, "ifString") <> invalid
		return obj
	else
		return ""
	endif
End Function 

'******************************************************
' validint
'
' Always return a valid integer. If the argument is 
' invalid or not an integer, return zero.
'******************************************************
Function validint(obj As Dynamic) As Integer
	if obj <> invalid and GetInterface(obj, "ifInt") <> invalid
		return obj
	else
		return 0
	end if
End Function 

'******************************************************
'Validate parameter is the correct type
'******************************************************
Function validateParam(param As Object, paramType As String,functionName As String, allowInvalid = false) As Boolean
	if paramType = "roString" or paramType = "String" then
		if type(param) = "roString" or type(param) = "String" then
			return true
		endif
	else if type(param) = paramType then
		return true
	endif

	if allowInvalid = true then
		if type(param) = invalid then
			return true
		endif
	endif

	print "invalid parameter of type "; type(param); " for "; paramType; " in function "; functionName 
	return false
End Function
